数据结构 测验1
开始时间09/09/2024 12:00:00 AM
结束时间12/25/2024 11:59:00 PM
答题时长155519分钟
答卷类型标准答案
试卷总分100
判断题52 分
1-1

关于《数据结构》学科

《数据结构》是一门研究数值计算的程序设计问题的学科。

| 参考答案
答案
F
1分
1-2

NlogN2NlogN^2NlogNNlogN具有相同的增长速度。

| 参考答案
答案
T
2分
1-3

n!n! is O(nn)O(n^n).

| 参考答案
答案
T
2分
1-4

仅基于比较的算法能得到的最好的“最坏时间复杂度”是O(NlogN)O(NlogN)

| 参考答案
答案
T
1分
1-5

若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用顺序表存储最节省时间。

| 参考答案
答案
T
2分
1-6

NN个数据按照从小到大顺序组织存放在一个单向链表中。如果采用二分查找,那么查找的平均时间复杂度是O(logN)O(logN)

| 参考答案
答案
F
2分
1-7

线性表L如果需要频繁地进行不同下标元素的插入、删除操作,此时选择顺序存储结构更好。

| 参考答案
答案
F
1分
1-8

若一个栈的输入序列为{1, 2, 3, 4, 5},则不可能得到{3, 4, 1, 2, 5}这样的出栈序列。

| 参考答案
答案
T
2分
1-9

循环队列也存在空间溢出的问题。

| 参考答案
答案
T
1分
1-10

在实现二项式队列时,每棵二项式树是用左孩子右兄弟的结构表示的。

| 参考答案
答案
T
1分
1-11

已知一棵二叉树的先序遍历结果是ABC, 则CAB不可能是中序遍历结果。

| 参考答案
答案
T
2分
1-12

若一个结点是某二叉树的中序遍历序列的最后一个结点,则它必是该树的前序遍历序列中的最后一个结点。

| 参考答案
答案
F
2分
1-13

存在一棵总共有2016个结点的二叉树,其中有16个结点只有一个孩子。

| 参考答案
答案
F
3分
1-14

任何二叉搜索树中同一层的结点从左到右是有序的(从小到大)。

| 参考答案
答案
T
2分
1-15

二叉搜索树的查找和折半查找的时间复杂度相同。

| 参考答案
答案
F
2分
1-16

对AVL树中的任一结点,其左子树的高度一定比其右子树的高度要高。

| 参考答案
答案
F
1分
1-17

若一棵平衡二叉树的所有非叶结点的平衡因子都是0,则其必为完美二叉树。

| 参考答案
答案
T
2分
1-18

任何最小堆中从根结点到任一叶结点路径上的所有结点是有序的(从小到大)。

| 参考答案
答案
T
2分
1-19

关于哈夫曼树

哈夫曼树中一定没有度为 1 的结点。

| 参考答案
答案
T
1分
1-20

对于一个有NN个结点、KK条边的森林,不能确定它共有几棵树。

| 参考答案
答案
F
2分
1-21

无向连通图边数一定大于顶点个数减1。

| 参考答案
答案
F
1分
1-22

用邻接矩阵法存储图,占用的存储空间数只与图中结点个数有关,而与边数无关。

| 参考答案
答案
T
1分
1-23

Prim 算法是维护一个森林,每一步把两棵树合并成一棵。

| 参考答案
答案
F
1分
1-24

Prim 算法是通过每步添加一条边及其相连的顶点到一棵树,从而逐步生成最小生成树。

| 参考答案
答案
T
2分
1-25

如果 ee 是有权无向图 GG 唯一的一条最短边,那么边 ee 一定会在该图的最小生成树上。

| 参考答案
答案
T
2分
1-26

若图G为连通图且不存在拓扑排序序列,则图G必有环。

| 参考答案
答案
T
2分
1-27

NN个记录进行快速排序,在最坏的情况下,其时间复杂度是O(NlogN)O(NlogN)

| 参考答案
答案
F
1分
1-28

NN个记录进行归并排序,归并趟数的数量级是O(NlogN)O(NlogN)

| 参考答案
答案
F
2分
1-29

若用平方探测法解决冲突,则插入新元素时,若散列表容量为质数,插入就一定可以成功。

| 参考答案
答案
F
2分
1-30

在散列表中,所谓同义词就是被不同散列函数映射到同一地址的两个元素。

| 参考答案
答案
F
2分
1-31

KMP算法的特点是在模式匹配时指示主串的指针不会变小回溯。

| 参考答案
答案
T
2分
多选题9 分
3-1

根据数据元素之间的关系的不同特性,通常分为哪几类基本结构?

| 参考答案
答案
ABCD
3分
3-2

链表 - 时间复杂度

在包含 nn 个数据元素的链表中,▁▁▁▁▁ 的时间复杂度为 O(n)O(n)

| 参考答案
答案
ACB
3分
3-3

以下哪些项是栈元素操作的基本特点:

| 参考答案
答案
BC
3分
填空题9 分
4-1

数据结构由数据的

1分
1分
1分
三部分组成。

| 参考答案
填空#1
逻辑结构
填空#2
存储结构
填空#3
运算 | 操作
| 评测详情
填空详情
3分
4-2

对于给定的有向图如下,则每个顶点的入度和出度顺次为:

1分

6-4.JPG

填写格式:入度1/出度1 入度2/出度2 ... 入度6/出度6,相邻两顶点答案用 1 个空格分隔,不得有多余符号。

例如:0/1 2/3 4/5 6/0 1/2 3/4

| 参考答案
填空#1
3/0 2/2 1/2 1/3 2/1 2/3
| 评测详情
填空详情
1分
4-3

给定一组整数:

{ 36, 25, 81, 17, 49 }

采用简单选择排序法按升序排序,请写出从左往右执行一趟排序后的结果:

{ 
1分
,
1分
,
1分
,
1分
,
1分
}
| 参考答案
填空#1
17
填空#2
25
填空#3
81
填空#4
36
填空#5
49
| 评测详情
填空详情
5分
程序填空题30 分
5-1

下列代码的功能是将存有N个元素的数组A[]调整为最小堆。

#define leftchild(i) ( 2*(i)+1 )

void BuildMinHeap( ElementType A[], int N )
{  int i, j, child;
   ElementType Tmp;

   for ( i = (N-1)/2; i >= 0; i-- ) {
      j = i;
      for ( Tmp = A[j]; leftchild(j) < N; j = child ) {
         child = leftchild(j);
         if (
3分
) child ++; if (
3分
) A[j] = A[child]; else break; }
3分
; } }

感谢燕山大学窦燕老师修正题目!

| 参考答案
填空#1
child!=N-1 && A[child+1]<A[child]
填空#2
Tmp > A[child]
填空#3
A[j] = Tmp
| 评测详情
填空详情
9分
5-2

下列代码的功能是将大顶堆H中指定位置P上的元素的整数键值上调D个单位,然后继续将H调整为大顶堆。

void IncreaseKey( int P, int D, PriorityQueue H )
{
   int i, key;
   key = H->Elements[P] + D;
   for ( i = 
3分
; H->Elements[i/2] < key; i/=2 )
3分
; H->Elements[i] = key; }
| 参考答案
填空#1
P
填空#2
H->Elements[i] = H->Elements[i/2]
| 评测详情
填空详情
6分
5-3

下列代码的功能是对一个给定的图G执行拓扑排序,其中TopNum[]从1开始记录拓扑序。

void Topsort( Graph G )
{
   Queue Q;
   Vertex V, W;
   NodePtr ptr;
   int counter = 0;

   Q = CreateEmptyQueue(NumVertex);
   for ( V=0; V<G->NumV; V++ )
      if ( Indegree[V] == 0 )
         Enqueue(V, Q);
   while ( !IsEmpty(Q) ){
      V = Dequeue( Q );
      TopNum[V] = 
3分
; for ( ptr=G->List[V]; ptr; ptr=ptr->Next) { W = ptr->Vertex; if (
3分
== 0 ) Enqueue(W, Q); } } if ( counter != NumVertex ) printf("ERROR: Graph has a cycle.\n"); DisposeQueue(Q); }
| 参考答案
填空#1
++counter
填空#2
--Indegree[W]
| 评测详情
填空详情
6分
5-4

下列代码的功能是计算给定二叉树T的宽度。二叉树的宽度是指各层结点数的最大值。函数Queue_rearQueue_front分别返回当前队列Q中队尾和队首元素的位置。

typedef struct TreeNode *BinTree;
struct TreeNode
{
   int Key;
   BinTree  Left;
   BinTree  Right;
};

int Width( BinTree T )
{
   BinTree  p;
   Queue Q;
   int Last, temp_width, max_width;
   
   temp_width = max_width = 0;
   Q = CreateQueue(MaxElements);
   Last = Queue_rear(Q);
   if ( T == NULL) return 0;
   else {
      Enqueue(T, Q);
      while (!IsEmpty(Q)) {
         p = Front_Dequeue(Q); 
         
3分
; if ( p->Left != NULL ) Enqueue(p->Left, Q);
3分
; if ( Queue_front(Q) > Last ) { Last = Queue_rear(Q); if ( temp_width > max_width ) max_width = temp_width;
3分
; } /* end-if */ } /* end-while */ return max_width; } /* end-else */ }
| 参考答案
填空#1
temp_width++
填空#2
if ( p->Right != NULL ) Enqueue (p->Right, Q)
填空#3
temp_width = 0
| 评测详情
填空详情
9分